package com.wzb.controller;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.wzb.common.util.PageResult;
import com.wzb.common.util.R;
import com.wzb.entity.Student;
import com.wzb.service.IStudentService;
import com.wzb.vo.StudentVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author wzb
 * @since 2025-01-08
 */
@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private IStudentService studentService;

    // 学生列表
    @RequestMapping("/list")
    public R getStudent() {
        return okResponse("list");
    }

    // 分页查询
    @GetMapping("/findByPage/{page}/{pageSize}")
    public R findByPage(@PathVariable("page") Integer page,
                        @PathVariable("pageSize") Integer pageSize) {
        if (page <= 0 || pageSize <= 0) {
            return R.error().message("分页参数无效");
        }
        PageResult<Student> pr = studentService.findByPage(page, pageSize);
        return okResponse("pr");
    }

    // 条件带分页查询
    @PostMapping("/search/{page}/{pageSize}")
    public R search(@PathVariable("page") Integer page,
                    @PathVariable("pageSize") Integer pageSize,
                    @RequestBody(required = false) StudentVO vo) {
        if (page <= 0 || pageSize <= 0) {
            return R.error().message("分页参数无效");
        }
        PageResult<Student> pr = studentService.search(page, pageSize, vo);
        return okResponse("pr");
    }

    // 添加学生
    @PostMapping("/add")
    public R add(@RequestBody @Valid Student student) {  // 使用 @Valid 进行参数校验
        boolean flag = studentService.add(student);
        return flag ? okResponse("添加学生成功!") : errorResponse("添加学生失败!");
    }

    // 修改学生
    @PutMapping("/update")
    public R update(@RequestBody @Valid Student student) {
        boolean flag = studentService.updateById(student);
        return flag ? okResponse("修改学生成功!") : errorResponse("修改学生失败!");
    }

    // 删除学生
    @DeleteMapping("/delete/{ids}")
    public R delete(@PathVariable("ids") String ids) {  // 1,2,3
        if (StringUtils.isBlank(ids)) {
            return R.error().message("删除的学生ID为空");
        }
        List<String> sids = Arrays.asList(ids.split(","));
        boolean flag = studentService.removeByIds(sids);
        return flag ? okResponse("删除学生成功!") : errorResponse("删除学生失败!");
    }

    // 统一的成功响应方法
    private R okResponse(String key) {
        return R.ok().data(key, data);
    }

    // 统一的失败响应方法
    private R errorResponse(String message) {
        return R.error().message(message);
    }
}

